<?php

defined('SYSPATH') or die('No direct script access.');

class Model_Metrika extends Model {

    private $token;
    private $counter_id;

    public function __construct($domain_name) {
        $this->token = $this->get_token();
        $this->counter_id = $this->get_counter_id($domain_name);
    }

    #Возвращает OAuth token

    private function get_token() {
        $sock = fsockopen('ssl://oauth.yandex.ru', 443);
        $fields = "grant_type=password&username=test.intecweb&password=147258369&client_id=05d933c62c9f44f39ae4f0e23fec6620&client_secret=b46543211b2442da8064a4cc9fff7921";
        $msg = "POST /token HTTP/1.1\r\nHost: oauth.yandex.ru\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: " . (strlen($fields)) . "\r\n\r\n" . $fields . "\r\n\r\n";
        fwrite($sock, $msg);
        $resp = '';
        while (!feof($sock)) {
            $resp.=fgets($sock, 128);
        };
        fclose($sock);
        $arr = Array();
        preg_match_all("/{.*?}/", $resp, $arr);
        $json = json_decode($arr[0][0], true);
        return $json['access_token'];
    }

    #Возвращает все счётчики на аккаунте

    public function get_counters() {
        $url = "https://api-metrika.yandex.ru/counters.json?oauth_token=" . $this->token;
        $counters = json_decode(Model::factory('Curl')->get($url), true);
        return $counters['counters'];
    }

    #Возвращает идентификатор счётчика конкретного пользователя или false если у такого пользователя нет счётчика

    public function get_counter_id($name) {
        $counters = $this->get_counters();
        foreach ($counters as $counter) {
            if ($counter['site'] == $name) {
                return $counter['id'];
            }
            return false;
        }
    }

    #Возвращает данные о посещаемости

    public function get_traffic_stat($date_start = '', $date_end = '') {
        $url = "https://api-metrika.yandex.ru/stat/traffic/summary.json?id=" . $this->counter_id . "&date1=" . $date_start . "&date2=" . $date_end . "&oauth_token=" . $this->token;
        $traffic_stat = json_decode(Model::factory('Curl')->get($url), true);
        return $traffic_stat['data'];
    }

    #Возвращает данные об источниках трафика по поисковым системам

    public function get_sources_engines_stat($date_start = '', $date_end = '') {
        $url = "https://api-metrika.yandex.ru/stat/sources/search_engines.json?id=" . $this->counter_id . "&date1=" . $date_start . "&date2=" . $date_end . "&oauth_token=" . $this->token;
        $sources_stat = json_decode(Model::factory('Curl')->get($url), true);
        return $sources_stat['data'];
    }

    #Возвращает данные об источниках трафика по поисковым фразам

    public function get_sources_phrases_stat($date_start = '', $date_end = '') {
        $url = "https://api-metrika.yandex.ru/stat/sources/phrases.json?id=" . $this->counter_id . "&date1=" . $date_start . "&date2=" . $date_end . "&oauth_token=" . $this->token;
        $sources_stat = json_decode(Model::factory('Curl')->get($url), true);
        return $sources_stat['data'];
    }

    #Возвращает данные о принадлежности посетителей к географическим регионам

    public function get_geo_stat($date_start = '', $date_end = '') {
        $url = "https://api-metrika.yandex.ru/stat/geo.json?id=" . $this->counter_id . "&date1=" . $date_start . "&date2=" . $date_end . "&oauth_token=" . $this->token;
        $geo_stat = json_decode(Model::factory('Curl')->get($url), true);
        return $geo_stat['data'];
    }

    #Возвращает рейтинг посещаемости страниц сайта

    public function get_content_stat($date_start = '', $date_end = '') {
        $url = "https://api-metrika.yandex.ru/stat/content/popular.json?id=" . $this->counter_id . "&date1=" . $date_start . "&date2=" . $date_end . "&oauth_token=" . $this->token;
        $content_stat = json_decode(Model::factory('Curl')->get($url), true);
        return $content_stat['data'];
    }
    
    #Возвращает данные о переходах из всех источников на сайт
    
    public function get_summary_stat($date_start = '', $date_end = '') {
        $url = "http://api-metrika.yandex.ru/stat/sources/summary.json?id=" . $this->counter_id . "&date1=" . $date_start . "&date2=" . $date_end . "&oauth_token=" . $this->token;
        $summary_stat = json_decode(Model::factory('Curl')->get($url), true);
        return $summary_stat['data'];
    }

}